package com.thinkgem.jeesite.modules.sys.entity;

import java.util.HashMap;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.hikvision.cms.api.common.util.Digests;
import com.hikvision.cms.api.common.util.HttpClientSSLUtils;

/**
 * openapi 测试DEMO
 * 客户开发的时候可以参考此代码编写自己的应用
 * 也可以使用demo中的jar包，不过jar包使用务必使用全套，
 * 万不可只取其中一部分，避免依赖破坏
 * @author shengyiling
 *
 */
public class OpenapiTest {
	
	/**
	 * APPKEY需要到部署的平台服务器上生成。
	 * <p>
	 * 调用Openpai的操作码，需要去平台上生成，详见《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》中[获取AppKey和Secret]章节说明
	 * </p>
	 * <p>
	 * 《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》 该文档请找技术支持或者交付的同事提供
	 * </p>
	 */
	private static final String APPKEY = "9ce7937a";
	
	/**
	 * SECRET需要到部署的平台服务器上生成。
	 * <p>
	 * 调用Openpai的操作码，需要去平台上生成，详见《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》中[获取AppKey和Secret]章节说明
	 * </p>
	 * <p>
	 * 《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》 该文档请找技术支持或者交付的同事提供
	 * </p>
	 */
	private static final String SECRET = "48c2d242242941b389cd34716a2a15a2";
	
	
	/**
	 * http请求地址
	 * <p>openapi的地址,默认情况下openapi的IP端口与基础应用的IP端口是一致的</p>
	 * <p>请将地址配置正确.</p>
	 * <p>默认情况下是127.0.0.1:80 ，如果地址不通请根据实际情况修改IP端口</p>
 	 */
	private static final String OPENAPI_IP_PORT_HTTP = "http://61.190.184.51:85";
	
	/**
	 * https请求地址
	 * <p>openapi的地址,默认情况下openapi的IP端口与基础应用的IP端口是一致的</p>
	 * <p>请将地址配置正确.</p>
	 * <p>默认情况下是127.0.0.1:443 ，如果地址不通请根据实际情况修改IP端口</p>
 	 */
	private static final String OPENAPI_IP_PORT_HTTPS = "https://61.190.184.51:443";
	
	/**
	 * 获取默认用户UUID的接口地址，此地址可以从《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》中具体的接口说明上获取
	 */
	private static final String ITF_ADDRESS_GET_DEFAULT_USER_UUID = "/openapi/service/base/user/getDefaultUserUuid";
	
	/**
	 * 分页获取监控点信息的接口地址，此地址可以从《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》中具体的接口说明上获取
	 */
	private static final String ITF_ADDRESS_GET_CAMERAS = "/openapi/service/vss/res/getCameras";
	
	/**
	 * <p>操作用户UUID，即用户UUID，首次使用操作用户UUID可以通过接口 [获取默认用户UUID]来获取</p>
	 * <p>也可以通过接口[分页获取用户]来获取</p>
	 */
	private static final String OP_USER_UUID = "0be83d40695011e7981e0f190ed6d2e7";
	
	/**
	 * 测试方法
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {

		/***http方式调用***/
		System.out.println(testGetDefaultUserUUID());
		System.out.println(testGetCameras());
		System.out.println(testGetNetZones());
		System.out.println(testGetPreviewParamByCameraUuid());
		
		/***https方式调用***/
		/*System.out.println(testGetDefaultUserUUID_Https());
		System.out.println(testGetCameras_Https());*/
	}
	
	/**
	 * HTTP方式
	 * 获取默认用户UUID 测试
	 * @return
	 * @throws Exception
	 */
	public static String testGetDefaultUserUUID() throws Exception{
		String url = OPENAPI_IP_PORT_HTTP + ITF_ADDRESS_GET_DEFAULT_USER_UUID;
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("appkey", APPKEY);//设置APPKEY
		map.put("time", System.currentTimeMillis());//设置时间参数
		String params =  JSON.toJSONString(map);
		System.out.println(" ====== testGetDefaultUserUUID 请求参数：【" + params + "】");
		String data = HttpClientSSLUtils.doPost(url + "?token=" + Digests.buildToken(url + "?" + params, null, SECRET), params);
		System.out.println(" ====== testGetDefaultUserUUID 请求返回结果：【{" + data + "}】");
		
		return data;
	}
	
	public static String testGetNetZones() throws Exception{
		String url = OPENAPI_IP_PORT_HTTP + "/openapi/service/base/netZone/getNetZones";
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("appkey", APPKEY);//设置APPKEY
		map.put("time", System.currentTimeMillis());//设置时间参数
		map.put("opUserUuid", "0be83d40695011e7981e0f190ed6d2e7");//设置时间参数
		String params =  JSON.toJSONString(map);
		System.out.println(" ====== testGetNetZones 请求参数：【" + params + "】");
		String data = HttpClientSSLUtils.doPost(url + "?token=" + Digests.buildToken(url + "?" + params, null, SECRET), params);
		System.out.println(" ====== testGetNetZones 请求返回结果：【{" + data + "}】");
		return data;
	}
	
	/** 
	 * HTTP方式
	 * 分页获取监控点信息 测试
	 * @return
	 * @throws Exception
	 */
	public static String testGetCameras() throws Exception{
		 String url = OPENAPI_IP_PORT_HTTP + ITF_ADDRESS_GET_CAMERAS;
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("appkey", APPKEY);//设置APPKEY
        map.put("time", System.currentTimeMillis());//设置时间参数
        map.put("pageNo", 1);//设置分页参数
        map.put("pageSize", 5);//设置分页参数
        map.put("opUserUuid", OP_USER_UUID);//设置操作用户UUID
        String params = JSON.toJSONString(map);
        System.out.println(" ====== getCameras请求参数：【" + params + "】");
        String data = HttpClientSSLUtils.doPost(url + "?token=" + Digests.buildToken(url + "?" + params, null, SECRET), params);
        System.out.println(" ====== getCameras请求返回结果：【{" + data + "}】");
        return data;
	}
	
	public static String testGetPreviewParamByCameraUuid() throws Exception{
		String url = OPENAPI_IP_PORT_HTTP + "/openapi/service/vss/preview/getPreviewParamByCameraUuid";
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("appkey", APPKEY);//设置APPKEY
		map.put("time", System.currentTimeMillis());//设置时间参数
		map.put("opUserUuid", "0be83d40695011e7981e0f190ed6d2e7");//设置时间参数
		map.put("cameraUuid", "32b2331f25e64538914661783010e16b");//设置时间参数
		map.put("netZoneUuid", "c01bca5c84544802940fdc81f9c716a5");//设置时间参数
		String params =  JSON.toJSONString(map);
		System.out.println(" ====== testGetPreviewParamByCameraUuid 请求参数：【" + params + "】");
		String data = HttpClientSSLUtils.doPost(url + "?token=" + Digests.buildToken(url + "?" + params, null, SECRET), params);
		System.out.println(" ====== testGetPreviewParamByCameraUuid 请求返回结果：【{" + data + "}】");
		
		return data;
	}
	
	/*private static String testGetPresetInfosByCameraUuid() throws Exception{
		String url = OPENAPI_IP_PORT_HTTP + "/openapi/service/vss/preset/getPresetInfosByCameraUuid";
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("appkey", APPKEY);//设置APPKEY
		map.put("time", System.currentTimeMillis());//设置时间参数
		map.put("opUserUuid", "");//设置时间参数
		map.put("cameraUuid", "");//设置时间参数
		map.put("netZoneUuid", "");//设置时间参数
		String params =  JSON.toJSONString(map);
		System.out.println(" ====== testGetPresetInfosByCameraUuid 请求参数：【" + params + "】");
		String data = HttpClientSSLUtils.doPost(url + "?token=" + Digests.buildToken(url + "?" + params, null, SECRET), params);
		System.out.println(" ====== testGetPresetInfosByCameraUuid 请求返回结果：【{" + data + "}】");
		
		return data;
	}*/
	
	
	
	/**
	 * HTTPS方式
	 * 获取默认用户UUID 测试
	 * @return
	 * @throws Exception
	 */
	public static String testGetDefaultUserUUID_Https() throws Exception{
		String url = OPENAPI_IP_PORT_HTTPS + ITF_ADDRESS_GET_DEFAULT_USER_UUID;
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("appkey", APPKEY);//设置APPKEY
		map.put("time", System.currentTimeMillis());//设置时间参数
		String params =  JSON.toJSONString(map);
		System.out.println("============" + params + "============");
		String data = HttpClientSSLUtils.doPost(url + "?token=" + Digests.buildToken(url + "?" + params, null, SECRET), params);
		System.out.println("============" + data + "============");
		
		return data;
	}
	
	/**
	 * HTTPS方式
	 * 分页获取监控点信息 测试
	 * @return
	 * @throws Exception
	 */
	public static String testGetCameras_Https() throws Exception{
		 String url = OPENAPI_IP_PORT_HTTPS + ITF_ADDRESS_GET_CAMERAS;
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("appkey", APPKEY);//设置APPKEY
        map.put("time", System.currentTimeMillis());//设置时间参数
        map.put("pageNo", 1);//设置分页参数
        map.put("pageSize", 5);//设置分页参数
        map.put("opUserUuid", OP_USER_UUID);//设置操作用户UUID
        String params = JSON.toJSONString(map);
        System.out.println(" ====== getCameras请求参数：【" + params + "】");
        String data = HttpClientSSLUtils.doPost(url + "?token=" + Digests.buildToken(url + "?" + params, null, SECRET), params);
        System.out.println(" ====== getCameras请求返回结果：【{" + data + "}】");
        
        return data;
	}
	
}
